home *** CD-ROM | disk | FTP | other *** search
- ;»Hier ein kleiner Hardcopy-Treiber für die DeskJet Besitzer.
- ;»Für den SEKA (quick'n'dirty) Assembler, kann aber wohl leicht an andere
- ;»angepasst werden. (Was umgekehrt nicht so einfach ist) Der Treiber ist nur für
- ;»die hohe Auflösung, und hält sich an folgende Felder der Druckeranpassung:
-
- ;»Punkte/Zeile: 1280 -> 300dpi; 960 -> 150dpi
- ;»Qualität : Test -> Draft; Maximum -> Normal
- ;»Drucker Port: Printer -> Centronics Modem -> RS232
-
- ;»die anderen Einstellungen werden ignoriert.
-
- ; --- entlang der gestrichelten Linie ausschneiden ---
- ; gk, 20.12.89
- ; Hardcopy function - for HP Deskjet+
- ; (older Deskjet and Laserjet should work, too)
-
- hcflag EQU $04EE
- physbase EQU $044E
- hcvec EQU $0502
-
- start: bra entry ; branch behind resident part
-
- prtbyte: ; send byte in d0 to printer
- movem.l D1-D2/A0-A2,-(SP) ; save registers killed by BIOS
-
- move.w D0,-(SP) ; push char
- move.w device(PC),-(SP) ; and device
- move.w #3,-(SP) ; Bconout
- trap #13
- addq.w #6,SP
- movem.l (SP)+,D1-D2/A0-A2
- rts
-
- prtstr: ; print string, adress in a0; d0 is used
- move.b (A0)+,D0 ; get byte
- beq.s qprtstr ; done ?
- bsr.s prtbyte ; no, output and continue
- bra.s prtstr
-
- qprtstr: rts
-
- init: move.w #-1,-(SP)
- move.w #$21,-(SP) ; Setprt: get config.
- trap #14
- addq.w #4,SP
- move.w D0,prtset ; save config bits
- move.w #0,D1
- btst #4,D0 ; setup device acc to bit 4
- beq.s init1
- move.w #1,D1
- init1: move.w D1,device
- move.l #$74333030,resol ; 300 dpi
- btst #2,D0 ; 1280 = 300, 960 = 150 dpi
- beq.s init2
- move.l #$74313530,resol ; 150 dpi
- init2: move.b #'1',D1
- btst #3,D0 ; setup quality acc to bit 3
- beq.s init3
- move.b #'2',D1
- init3: move.b D1,qual
- rts
-
-
- dohc: ;DC.W $4AFC ; used to call debugger if active
- movem.l D0-A6,-(SP) ; safety first
- bsr.s init ; setup vectors & config
- movea.l physbase.w,A4 ; get screen base
- move.w #399,D6 ; counts lines
- lea iniseq(PC),A0 ; print graphics init string
- bsr.s prtstr
- ;
- doline: lea lininit(PC),A0 ; print line init string
- bsr.s prtstr
- move.w #79,D7 ; setup byte counter
-
- linlop: move.b (A4),D0 ; get value, inc
- not.b (A4)+ ; invert on screen
- bsr prtbyte ; and output it
- dbra D7,linlop ; loop on colums (bytes)
- tst.w hcflag.w ; test for user cancel request
- dbne D6,doline ; loop on lines
- lea termseq(PC),A0 ; send termination sequence
- bsr prtstr
-
- qhc: move.l A4,D0 ; compute how many bytes
- movea.l physbase.w,A4 ; were actually transmitted
- sub.w A4,D0
- subq.w #1,D0
- invback: not.b (A4)+ ; and re-invert only these
- dbra D0,invback
- movem.l (SP)+,D0-A6 ; restore registers
- rts
-
- prtset: DC.W 0 ; printer setup stored here
- device: DC.W 0 ; where to output to
-
- EVEN
-
- iniseq: DC.B 27,"*rB" ; prophylactic END RASTER GRAPHICS
- DC.B 27,"*" ; set resolution part 1
- resol: DC.B "t300R" ; part 2, MUST be on even address
- DC.B 27,"*r640S" ; set 640 pixel width
- DC.B 27,"*b0M" ; set non-runlength mode (stay compatible
- ; to PCL Level III devices)
- DC.B 27,"*r"
- qual: DC.B "1Q" ; Draft (1) or letter (2) quality
- DC.B 27,"*r0A",0 ; start at leftmost position
- lininit: DC.B 27,"*b80W",0 ; Transfer raster graphics
- termseq: DC.B 27,"*rB" ; end raster graphics
- DC.B $0D,$0A,0 ; line feed -> delete for adjacent graphics
-
- EVEN
- ;
- ; --- resident part ends here ---
- ;
- entry: pea setvec(PC) ; execute vector setup in Supervisor mode
- move.w #38,-(SP)
- trap #14
- addq.l #6,SP
-
- clr.w -(SP)
- move.l #entry-start+$0100,-(SP) ; compute resident size
- move.w #$31,-(SP) ; terminate'n'stay
- trap #1
-
- setvec: lea dohc(PC),A0
- move.l A0,hcvec
- rts
-
- END
-